Repository navigation
docs(skills): the object enable table names aiReadable - #33458
Conversation
One row in the Object Capabilities table of the data skill: aiReadable opens read-only AI access on a platform sys_* object (never the stored-metadata family), and an app object never declares it, false included, because the parse refuses it there. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FEkQ5nzn5SncinMdswdSzM
|
domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb Contract reviewServed-tier: ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgmentskills/objectstack-data/SKILL.md, the new
Implemented-by: VERDICT: PASS Adopted by the seat 2026-11-14T21:42Z · isolated sub-agent at CONTRACT_REVIEW_TIER · Ruling-ref: Leehom card cmsg_01TenzsRopZj4jMbvjX8uz1XFhuiZmTH8VFgMmHRmpiGAb, option A, tapped 2026-11-14T15:37Z |
…a objects Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FEkQ5nzn5SncinMdswdSzM
|
domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb Contract review (delta)Served-tier: This is a DELTA record. It judges the move from ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgmentskills/objectstack-data/SKILL.md, the corrected
Implemented-by: VERDICT: PASS Adopted by the seat 2026-11-14T22:11Z · isolated sub-agent at CONTRACT_REVIEW_TIER · Ruling-ref: Leehom card cmsg_01TenzsRopZj4jMbvjX8uz1XFhuiZmTH8VFgMmHRmpiGAb, option A, tapped 2026-11-14T15:37Z |
|
domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb 维护者速读
席位核对Verdict: ACCEPT, held for the maintainer · head
|
|
domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb Contract reviewServed-tier: This is the at-tier re-review of this head. It judges the tree on its own reading and does not rest on records 6884644527 or 6884995626; ③ says which of their findings it confirms. ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgmentskills/objectstack-data/SKILL.md, the
No must-fix and no should-fix. Nits alone end the round. Implemented-by: VERDICT: PASS Adopted by the seat 2026-11-15T00:28Z · isolated sub-agent at CONTRACT_REVIEW_TIER (served model verified by the seat) · Ruling-ref: Leehom card cmsg_01TenzsRopZj4jMbvjX8uz1XFhuiZmTH8VFgMmHRmpiGAb, option A, tapped 2026-11-14T15:37Z |
|
domain:skills#1 · os-project-manager · session_01FEkQ5pjSPT7ui2EUcunaVb Correction: contract-review tierThe contract-review record(s) 6884644527, 6884995626 on this PR say The seat re-runs the review at |
Requested by Leehom · project thread
Fixes #32974
domain:skills#1 · os-project-manager · session_01FEkQ5nzn5SncinMdswdSzM
Clause-②: no
Metadata-protocol: none
维护者速读
objectstack-data技能的对象能力表(enable)加一行aiReadable:只用于平台系统对象(sys_*,不含sys_metadata、sys_metadata_history),开放只读 AI 访问(查询、取单条、聚合、describe、列表,永不写);应用对象从不声明它,连false也会在解析时被拒。enable.aiReadable,技能文字没教,AI 照着能力表写应用对象时既不知道它存在,也不知道写在业务对象上会被拒。@objectstack/skillspatch changeset;不动 schema、不动运行时;回滚即还原本 PR。skills/objectstack-data/SKILL.md第 121 行(能力表最后一行)。git diff origin/main -- skills/,预期只见能力表末尾新增aiReadable一行,默认列为—。skills/**):请批准或合并。What changes
skills/objectstack-data/SKILL.md, Object Capabilities (enable) table, one row afterclone:| aiReadable | — | Platform sys_* objects only (not sys_metadata, sys_metadata_history): read-only AI access (query, get, aggregate, describe, list; no write). App objects never declare it, false included: refused at parse |(backticks around the identifiers in the file). The Default column reads
—, notfalse: an absent key is closed, and writingfalseon an app object is itself refused, so afalsedefault would invite the one value that fails..changeset/32974-skills-enable-ai-readable-row.md:'@objectstack/skills': patch, carrying both declaration lines.Why
Read on
origin/mainba35dfd,packages/spec/src/data/ai-read-exposure.ts:aiReadExposureRefusal(objectName, enable)judges any declared value (falseincluded; only an absent orundefinedkey passes) in this order: first the stored-metadata family (isStoredMetadataBodyObject,STORED_METADATA_BODY_OBJECTS=sys_metadata,sys_metadata_history, inpackages/spec/src/kernel/stored-metadata-body-objects.ts) is refused whatever the key says; then asys_name (/^sys_/i) is accepted; every other name is refused ("is not a system object ... Remove it").ObjectSchema's refinement calls it throughrefuseMisplacedAiReadExposure(object.zod.ts), so every door that parses an object refuses it:ObjectSchema.create,defineStack,os validateand the object save door.isAiReadExposed(schema)answerstrueonly for the booleantrueon asys_*object outside that family.isAiReadExposedis read bypackages/runtime/src/domains/mcp.ts,packages/mcp/src/mcp-http-tools.tsandpackages/mcp/src/stdio-data-bridge.ts, and two platform objects declare it (sys_userinplatform-objects,sys_approval_requestinplugin-approvals). The.describetext inObjectCapabilitiessays the same as the new row.Acceptance notes
skills/objectstack-data/evals/asks for theenabletable (the onlytrackHistoryhit is amust_not_containin a lifecycle eval), andobjects-fields-relationships.jsonandrules/relationships.mdbelong to open PRs docs(skills): parent-path record-currency amounts admit no grouping; data eval for the parent-path currencyField #33394 and docs(skills): teach sharing.controlledByParent.writeRequiresMasterRead in the controlled_by_parent rules #33427 and are untouched.SKILL.mdmight sit at its token ceiling; measured headroom was 59 tokens before the row and 0 after, so no other text was cut and no ceiling moved. The review round's fix (naming the two refused objects) was paid inside the row itself (never a writetono write,An app object never declarestoApp objects never declare).Verification
Head
fa4ef05c, baseorigin/mainba35dfd.Line and token budget (skills/**)
skills/objectstack-data/SKILL.md: 477 to 478 lines, 26441 to 26678 bytes; token ratchet 6606 to 6665 (ceiling 6665, headroom 0). No ceiling raised.skills/*/SKILL.md: 4602 to 4603 lines, 235787 to 236024 bytes. Bundle total (whole shipped tree): 244310 to 244369 tokens.node scripts/pm/check-skill-line-ratchet.mjs: exit 0.node scripts/check-skills-token-ratchet.mjs: exit 0.Derived gates: 46 derived, 44 run green, 2 NOT MEASURED
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 46 families for the two paths; each was run with its exit code captured before any pipe.check-adr-0087-registration,check-empty-changeset,check-skills-token-ratchet(scan and--self-testeach),@objectstack/spec check:skill-docs,check:doc-authoring,check:nul-bytes,check:pm-governed-merges,check:published-files,check:skill-compatibility,check:skill-frame-sync,check:skill-identifier-liveness,check:skill-links.@objectstack/lint check:doc-formula-expressions: first exit 3 (no lint dist); exit 0 afterpnpm --filter "@objectstack/lint..." buildunder the verify lock (VERDICT command-exit 0, 89s; rebuilt for head fa4ef05, 73s).check:dts-closureandcheck:sourcemap-no-sources-content: first exit 3, then exit 0 after that build, sweeping only the 5 built packages, not every package'sdist/.dist/):check:dual-build-cjs-loads,check:lean-entry-closure. No package source is touched, so no full build was paid; CI builds and runs them.--ran: "46 derived famil(ies) accounted for — 44 run, 2 NOT-MEASURED (2 DERIVED from a recorded exit 3)".Tier and governed readings
dispatch-gates --tier: MANDATORY contract-review tier,skills/**under clause ① (the published catalog); no one-line exit for this surface.node scripts/pm/check-governed-merges.mjs --branch claude/project-thread-7ha66d: exit 3, GOVERNED, landing tier H (人合). 1 of 2 paths on the register (skills/**); the changeset is not. Size +11 / -0, under the 3000 threshold.🤖 Generated with Claude Code
https://claude.ai/code/session_01FEkQ5nzn5SncinMdswdSzM